#include "app_common.h"
#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <log.h>

/**
 * 获取当前时间的毫秒数
 * 
 */
long long  app_common_get_curtime_ms()
{
    struct timeval tv;
    gettimeofday(&tv, NULL);

    return ((long long)tv.tv_sec * 1000) + (tv.tv_usec / 1000);
}

/**
 * 
 * 把字节数组转换为一个十六进制字符串
 */
int app_common_bytes_to_hexstr(char *bytes , int len , char *hexstr)
    
{  // 思路  'a' ->0x61  ->       0x06 -> '6'      ->'61'
    char hex[16]="0123456789ABCDEF";
    // 循环遍历字符数组
    for(int i=0;i<len;i++)
    {
        // 高位 
        hexstr[i*2]=hex[(bytes[i]>>4)&0x0f];
        // 低位
        hexstr[i*2+1]=hex[bytes[i]&0x0f];
    }
    hexstr[len*2]='\0';

}

  int  char_to_btyes(char c ,int *b)
  {
      if(c>='0'&&c<='9')
      {
          *b= c-'0';
      }else if(c>='A'&&c<='F')
      {
          *b= c-'A'+10;
      }else if(c>='a'&&c<='f')
      {
           *b= c-'a'+10;
      }else{
          log_error("app_common_hexstr_to_btyes error");
          return -1;
      }
      return 0;
  }

int app_common_hexstr_to_btyes( char *hexstr , char *bytes )
{
    // 循环u字符串
    for(int i=0;i<strlen(hexstr) ;i+=2)
    {   
        int high;
        // 高位
        int ret= char_to_btyes(hexstr[i] ,&high);
         if(ret<0){
            log_debug("high:%d",high);
            log_error("high app_common_hexstr_to_btyes error");
            return -1;
         }
        // 低位
         int low;
         int retlow= char_to_btyes(hexstr[i+1] ,&low);
         if(retlow<0){
             log_debug("high:%d",low);
            log_error("low app_common_hexstr_to_btyes error");
            return -1;
         }
         //合并
         bytes[i/2] = (high << 4) | low;
    }
    return 0;

}


int app_common_log_info_hex(char *bytes , int len)
{
    for (int i = 0; i < len; i++)
    {
        log_info("%02x ",bytes[i]);
    }
    log_info("\n");
    
}